home *** CD-ROM | disk | FTP | other *** search
- #!/usr/app/bin/perl
-
- eval 'exec /usr/app/bin/perl -S $0 ${1+"$@"}'
- if 0; # not running under some shell
-
- # <sjburges@gimp.org>
- # This is tigert's request. I suppose it'll be useful to those that do
- # this sort of thing. Personally I'll probably only run it to test and
- # put up a demo image.
-
- # Since updated a couple times by others, and intgrated by me:
- #
- # Bruce Miller (fixed to accomdate 1.1.x changes)
- # Brendon and Wendy Humphrey <brendy@swipnet.se> (progress bar, nice comments)
- #
- # Tuomas Kuosmanen <tigert@gimp.org>
- # Fixed some things to make this work with cvs gimp. Fixed calls to
- # gimp_get_guide_orientation() (guide types that changed from
- # GUIDE_VERTICAL to VERTICAL and horizontal, respectively. Should
- # work now). Also convert to indexed parameters changed, fixed them too.
- #
- # <sjburges@gimp.org>
- # Added changes to make progess bar work for images with only horizontal
- # or vertical guides. This was fixed at one time, I forget who did that.
- # Somehow it got broke again ;(
- #
- # Added File::Path; for making the directory if it doesn't already exist.
- #
- # If you have more additions, etc please don't hesitate to send them in!
-
- use File::Path;
-
- use Gimp;
- use Gimp::Fu;
- use Gimp::Util;
-
- # Uncomment if you want to see everything that's going on.
- # Gimp::set_trace(TRACE_ALL);
-
- #
- # Generates an ordered list of all existing vertical guides.
- #
-
- sub get_vguides {
- my ($img)=@_;
- $i=0;
- my @vguides;
- while ($i=$img->find_next_guide($i)) {
- if ($img->get_guide_orientation($i) == &Gimp::VERTICAL){
- $keyval = sprintf("%4d", $img->get_guide_position($i));
- $vkeys{$keyval} = $i;
- }
- }
- foreach $key(sort (keys %vkeys)) {
- # print "Unshifting ", $key, "\n";
- push @vguides, $vkeys{$key};
- }
- return @vguides;
- }
-
- #
- # Generates an ordered list of all existing horizontal guides.
- #
-
- sub get_hguides {
- my ($img)=@_;
- $i=0;
- my @hguides;
- while ($i=$img->find_next_guide($i)) {
- if ($img->get_guide_orientation($i) == &Gimp::HORIZONTAL){
- $keyval = sprintf("%4d", $img->get_guide_position($i));
- $hkeys{$keyval} = $i;
- }
- }
- # need to sort them in order of their occurance in the image
- foreach $key(sort keys %hkeys) {
- push @hguides, $hkeys{$key};
- }
- return @hguides;
- }
-
- #
- # Duplicate, crop and save the image fragment.
- #
-
- sub dosel {
- ($img, $savepath, $imgpath, $imgbasename, $extension, $l,$r,$t,$b, $i,$j) = @_;
- $filename =~ m/^(.*)\.[^\.]*$/ ;
- $imgname = "$imgbasename-$i-$j.$extension";
- $tmpimg = $img->channel_ops_duplicate;
- # print "Cropping from $l to $r, $t to $b\n";
- $tmpimg->crop($r-$l, $b-$t, $l, $t);
- $tmpimg->Gimp::Fu::save_image("$savepath$imgpath$imgname","$savepath$imgpath$imgname");
- $tmpimg->delete;
- return "$imgpath$imgname"; # what I want printed in html
- }
-
- #
- # HTML Table Generation Functions
- #
-
- sub html_table_start {
- ($fn,$cellpadding,$cellspacing,$border,$capatalize) = @_;
- $str = $capatalize ?
- "<TABLE CELLSPACING=$cellspacing CELLPADDING=$cellpadding BORDER=$border>\n" :
- "<table cellspacing=$cellspacing cellpadding=$cellpadding border=$border>\n" ;
- print $fn $str;
- }
-
- sub html_table_row_start {
- ($fn, $capatalize) = @_;
- $str = $capatalize ? "\t<TR>\n" : "\t<tr>\n";
- print $fn $str;
- }
-
- sub html_table_entry {
- ($fn, $imgname, $width, $height, $capatalize) = @_;
- $str = $capatalize ?
- "\t\t<TD><IMG ALT=\" \" SRC=\"$imgname\" WIDTH=\"$width\" HEIGHT=\"$height\"></TD>\n" :
- "\t\t<td><img alt=\" \" src=\"$imgname\" width=\"$width\" height=\"$height\"></td>\n";
- print $fn $str;
- }
-
- sub html_table_row_end {
- ($fn, $capatalize) = @_;
- $str = $capatalize ? "\t</TR>\n" : "\t</tr>\n";
- print $fn $str;
- }
-
- sub html_table_end {
- ($fn, $capatalize) = @_;
- $str = $capatalize ? "</TABLE>\n":"</table>\n";
- print $fn $str;
- }
-
- # <tigert> Save-path: [_____________________][browse]
- # <tigert> html-file name: [_________________]
- # <tigert> image-basename [__________________]
- # <tigert> [x] use separate dir for images
- # <tigert> image directory: [___________________]
-
- # later, decided to have UPPER/lower case HTML toggle
- # cellspacing: ___^
-
- register "perlotine",
- "Guilotine implemented ala perl, with html output",
- "Add guides to an image. Then run this. It will cut along the guides, and give you the html to reassemble the resulting images.",
- "Seth Burgess",
- "Seth Burgess <sjburges\@gimp.org>",
- "1999-03-19",
- N_"<Image>/Filters/Web/Perl-o-tine...",
- "*",
- [
- [PF_STRING, "save_path", "The path to export the HTML to",$ENV{HOME}],
- [PF_STRING, "html_file_name", "Filename to export","perlotine.html"],
- [PF_STRING, "image_basename", "What to call the images","perlotine"],
- [PF_RADIO, "image_extension", "The format of the images: {gif, jpg, png}", "gif", [gif => "gif", jpg => "jpg", png => "png"]],
- [PF_TOGGLE, "separate_image_dir", "Use a separate directory for images?",0],
- [PF_STRING, "relative_image_path", "The path to export the images to, relative to the Save Path", "images/"],
- [PF_TOGGLE, "capitalize_tags", "Capatalize HTML tags?", 0],
- [PF_SPINNER, "cellspacing", "Add space between the table elements", 0, [0,15,1]],
- ], sub {
-
- my($img,$layer,$savepath, $htmlname, $imgbasename, $extension, $separate, $imgpath, $capatalize, $cellspacing) =@_;
-
- @vert = get_vguides($img);
- @horz = get_hguides($img);
-
- if (!(scalar(@vert) || scalar(@horz))) {
- die __"No horizontal or vertical guides found. Aborted.";
- }
-
- #
- # Progress Bar
- #
-
- Gimp->progress_init("Perl-o-Tine");
- $progress_increment = 1/( (scalar(@horz)+1) * (scalar(@vert)+1) );
- $progress = 0.0;
-
- # (Debugging info for the guide functions)
-
- # print @vert, " LEN = ", scalar(@vert), "\n";
- # print @horz, " LEN = ", scalar(@horz), "\n";
- # foreach $guide (@vert) {
- # print $img->get_guide_position($guide), "\n";
- # }
-
- #
- # Correctly format paths and filenames
- #
- if (!($savepath=~ m,/$,)) { # add a trailing slash if its not on there
- $savepath = $savepath . "/";
- }
-
- if (!($imgpath=~ m,/$,)) { # add a trailing slash if its not on there
- $imgpath= $imgpath . "/";
- }
- if (!$separate) { $imgpath = ""; }
-
- # create paths if they don't already exist
- mkpath($savepath);
- mkpath($savepath . $imgpath);
-
- # open HTML file for writing
- open FILE, ">$savepath$htmlname" or die "Couldn't open $savepath$htmlname: $!\n";
-
- $top=0;
- html_table_start(\*FILE,0,$cellspacing,0,$capatalize);
- for ($i=0; $i<=scalar(@horz); $i++) {
- $bot = ($i>$#horz) ? $img->height : $img->get_guide_position($horz[$i]);
- html_table_row_start(\*FILE, $capatalize);
- $left=0;
- for ($j=0; $j<=scalar(@vert); $j++) {
- $right = ($j>$#vert) ? $img->width : $img->get_guide_position($vert[$j]);
- $imgname = dosel($img, $savepath, $imgpath, $imgbasename, $extension, $left, $right, $top, $bot, $i, $j);
- html_table_entry(\*FILE, $imgname, $right-$left, $bot-$top, $capatalize);
- $left = $right + $cellspacing;
-
- # Increment the progress bar
- $progress += $progress_increment;
- Gimp->progress_update ($progress);
- }
- html_table_row_end(\*FILE, $capatalize);
- $top = $bot + $cellspacing;
- }
- html_table_end(\*FILE, $capatalize);
- return();
- };
- exit main;
-